Cargamos las librerías
library(readxl) #subir nuestros archivos de excel
library(ggplot2) #realizar visualizaciones como gráficos
library(dplyr) #manipulación de nuestra data
library(tidyr) #ordenas nuestra data, especificamente en drop_na
library(plotly) #gráficos interactivos
library(viridis) #paleta de color prediseñada
library(stringr) #la usamos para ajustar el tamaño del texto en nuestros ejes
library(tidyverse) Subimos nuestra base:
base<- read.csv("linea-mujeres.csv", fileEncoding="latin1")Análisis
Renombrar nuestros valores, en este caso los meses numéricos por su nombre [01 -> enero]
base %>%
filter(TEMATICA_2=="VIOLENCIA FAMILIAR",
AÑO_ALTA >=2017) %>%
count(AÑO_ALTA, MES_ALTA)## AÑO_ALTA MES_ALTA n
## 1 2017 1 282
## 2 2017 2 281
## 3 2017 3 248
## 4 2017 4 290
## 5 2017 5 321
## 6 2017 6 314
## 7 2017 7 312
## 8 2017 8 308
## 9 2017 9 280
## 10 2017 10 302
## 11 2017 11 277
## 12 2017 12 256
## 13 2018 1 322
## 14 2018 2 338
## 15 2018 3 291
## 16 2018 4 364
## 17 2018 5 406
## 18 2018 6 395
## 19 2018 7 403
## 20 2018 8 364
## 21 2018 9 338
## 22 2018 10 342
## 23 2018 11 329
## 24 2018 12 309
## 25 2019 1 314
## 26 2019 2 217
## 27 2019 3 243
## 28 2019 4 291
## 29 2019 5 300
## 30 2019 6 341
## 31 2019 7 355
## 32 2019 8 407
## 33 2019 9 318
## 34 2019 10 369
## 35 2019 11 317
## 36 2019 12 341
## 37 2020 1 395
## 38 2020 2 445
## 39 2020 3 460
## 40 2020 4 222
## 41 2020 5 53
## 42 2020 6 53
## 43 2020 7 53
## 44 2020 8 30
## 45 2020 9 35
## 46 2020 10 38
## 47 2020 11 2
base %>%
filter(TEMATICA_2=="VIOLENCIA FAMILIAR",
AÑO_ALTA >=2017) %>%
mutate(MES=case_when(
MES_ALTA== 1~"ene",
MES_ALTA== 2~"feb",
MES_ALTA== 3~"mar",
MES_ALTA== 4~"abr",
MES_ALTA== 5~"may",
MES_ALTA== 6~"jun",
MES_ALTA== 7~"jul",
MES_ALTA== 8~"ago",
MES_ALTA== 9~"sep",
MES_ALTA== 10~"oct",
MES_ALTA== 11~"nov",
MES_ALTA== 12~"dic"),
MES=factor(MES,
levels=c("ene", "feb", "mar","abr", "may", "jun",
"jul", "ago", "sep","oct", "nov", "dic"))) %>%
count(AÑO_ALTA, MES, name = "TOTAL") %>%
pivot_wider(names_from = "AÑO_ALTA",
values_from = "TOTAL") #pivot_wider es para cambiar la posición de filas y columnas## # A tibble: 12 × 5
## MES `2017` `2018` `2019` `2020`
## <fct> <int> <int> <int> <int>
## 1 ene 282 322 314 395
## 2 feb 281 338 217 445
## 3 mar 248 291 243 460
## 4 abr 290 364 291 222
## 5 may 321 406 300 53
## 6 jun 314 395 341 53
## 7 jul 312 403 355 53
## 8 ago 308 364 407 30
## 9 sep 280 338 318 35
## 10 oct 302 342 369 38
## 11 nov 277 329 317 2
## 12 dic 256 309 341 NA
Visualizar el comportamiento de las llamadas en el tiempo:
base %>%
filter(TEMATICA_2 %in% c("VIOLENCIA FAMILIAR"),
AÑO_ALTA >=2017) %>%
count(AÑO_ALTA, MES_ALTA)%>%
ggplot(aes(x = MES_ALTA, y = n,
fill = AÑO_ALTA, colour=AÑO_ALTA, group=1)) +
geom_point() +
geom_line()+
scale_color_viridis_c(option = "viridis", direction = 1) + #color de relleno
scale_fill_viridis_c(option = "viridis", direction = 1) + #color del contorno
scale_x_continuous(limits = c(0, 12))+ #límites del eje x
labs(title = "", fill="Año", colour="Año",
x="", y="")+ #titulo
theme_minimal() -> grafico_mesComparativa entre meses
ggplotly(grafico_mes)Transformemos fechas
Es necesario descargar e instalar lubridate
library(lubridate)
base$FECHA <-as.Date(base$FECHA_ALTA, format="%d/%m/%Y") #definir nuetra variable en tipo de fecha
base$PERIODO <-format(as.Date(base$FECHA_ALTA, format="%d/%m/%Y"), "%Y/%m") # 15/03/2022 -> 03/2022
base %>%
filter(TEMATICA_2%in%c("VIOLENCIA FAMILIAR")) %>%
count(PERIODO, AÑO_ALTA) %>%
ggplot(aes(x=PERIODO, y=n,group=1))+
geom_point(fill="purple", colour="purple", size = 2)+
geom_line(colour="purple", size = 1) +
# geom_text(aes(x=PERIODO, y=n, label=n),
# colour="black", size=4, angle=90,
# hjust=-1, vjust=1,)+ #añadir la etiqueta de valor
geom_vline(xintercept ="2020/03", linetype="dashed",
color='red', size=1)+ #añadir linea vertical
labs(title = "Comparativa entre llamadas por violencia y violencia familiar",
x="Período mensual", y="Total de llamadas",
fill="Temática", colour="Temática",
caption = "Elaboración propia con datos del Gobierno de la CDMX")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 90))->graf_periodo #rotar el texto del ejeComportamiento de las llamadas de violencia en el tiempo
graf_periodoggplotly(graf_periodo)Calculamos el promedio de llamadas en todo el período
base %>%
filter(TEMATICA_2 == "VIOLENCIA FAMILIAR") %>%
count(PERIODO, AÑO_ALTA) %>%
summarise(Promedio=mean(n)) # Calcular el promedio de llamadas por V. Familiar## Promedio
## 1 281.4694
graf_periodo +
geom_hline(yintercept = 281.46, colour="orange") #añadir línea horizontalQuiénes están realizando las llamadas por motivos de violencia familiar
## OCUPACION AÑO_ALTA TOTAL
## 1 EMPLEADO (A) 2019 1638
## 2 EMPLEADO (A) 2018 1331
## 3 HOGAR 2019 1297
## 4 HOGAR 2018 1160
## 5 EMPLEADO (A) 2020 830
## 6 EMPLEADO (A) 2017 828
## 7 HOGAR 2017 807
## 8 HOGAR 2020 573
## 9 COMERCIANTE 2019 347
## 10 COMERCIANTE 2018 231
## 11 COMERCIANTE 2017 164
## 12 EMPLEADO (A) 2016 160
## 13 HOGAR 2016 157
## 14 ESTUDIANTE 2018 138
## 15 COMERCIANTE 2020 115
## 16 TRABAJO INDEPENDIENTE 2019 113
## 17 ESTUDIANTE 2019 110
## 18 PENSIONADO (A) 2019 101
## 19 TRABAJO INDEPENDIENTE 2018 97
## 20 DESEMPLEADO (A) 2018 76
## 21 DESEMPLEADO (A) 2019 75
## 22 ESTUDIANTE 2017 71
## 23 PENSIONADO (A) 2018 68
## 24 ESTUDIANTE 2020 67
## 25 TRABAJO INDEPENDIENTE 2020 65
## 26 TRABAJADOR (A) DE GOBIERNO 2019 64
## 27 EMPLEADA DEL HOGAR(REMUNERADO) 2019 63
## 28 TRABAJO INDEPENDIENTE 2017 59
## 29 DESEMPLEADO (A) 2017 48
## 30 DESEMPLEADO (A) 2020 45
## 31 TRABAJADOR (A) DE GOBIERNO 2018 37
## 32 PENSIONADO (A) 2020 36
## 33 PENSIONADO (A) 2017 32
## 34 COMERCIANTE 2016 31
## 35 TRABAJADOR (A) DE GOBIERNO 2017 30
## 36 TRABAJADOR (A) DE GOBIERNO 2020 29
## 37 EMPLEADA DEL HOGAR(REMUNERADO) 2018 23
## 38 EMPLEADA DEL HOGAR(REMUNERADO) 2020 22
## 39 EMPLEADA DEL HOGAR(REMUNERADO) 2017 20
## 40 DESEMPLEADO (A) 2016 12
## 41 ESTUDIANTE 2016 11
## 42 OTRO 2017 10
## 43 PENSIONADO (A) 2016 6
## 44 TRABAJO INDEPENDIENTE 2016 6
## 45 EMPLEADA DEL HOGAR(REMUNERADO) 2016 5
## 46 EMPRESARIO (A) 2018 5
## 47 EMPRESARIO (A) 2019 5
## 48 EMPRESARIO (A) 2020 4
## 49 OTRO 2016 4
## 50 TRABAJADOR (A) DE GOBIERNO 2016 3
## 51 EMPRESARIO (A) 2016 1
## 52 EMPRESARIO (A) 2017 1
base %>%
filter(TEMATICA_2=="VIOLENCIA FAMILIAR") %>%
count(OCUPACION, AÑO_ALTA, name = "TOTAL") %>%
drop_na() %>%
arrange(-TOTAL) %>%
pivot_wider(names_from = "OCUPACION", values_from = "TOTAL") #invertir la posición entre filas y columnas## # A tibble: 5 × 12
## AÑO_ALTA `EMPLEADO (A)` HOGAR COMERCIANTE ESTUDIANTE `TRABAJO INDEPENDIENTE`
## <int> <int> <int> <int> <int> <int>
## 1 2019 1638 1297 347 110 113
## 2 2018 1331 1160 231 138 97
## 3 2020 830 573 115 67 65
## 4 2017 828 807 164 71 59
## 5 2016 160 157 31 11 6
## # … with 6 more variables: `PENSIONADO (A)` <int>, `DESEMPLEADO (A)` <int>,
## # `TRABAJADOR (A) DE GOBIERNO` <int>, `EMPLEADA DEL HOGAR(REMUNERADO)` <int>,
## # OTRO <int>, `EMPRESARIO (A)` <int>
base %>%
filter(TEMATICA_2=="VIOLENCIA FAMILIAR") %>%
count(OCUPACION, AÑO_ALTA, name = "TOTAL") %>%
drop_na() %>%
arrange(-TOTAL) %>%
ggplot(aes(x=reorder(OCUPACION, -TOTAL), y=TOTAL, fill=as.factor(AÑO_ALTA))) + #as.factor() que el valor númerico se convierta a factor, o sea una variable categórica con un orden
geom_col(position = "dodge") +
scale_fill_viridis_d(option = "viridis", direction = 1) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 2)) + #Este reglón es para ajustar el tamaño de texto que cabe en cada var de x
labs(title = "", fill="Año",
x="", y="Total de llamadas")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 45)) ->grafico_ocupación
ggplotly(grafico_ocupación)